// 执行命令  ts-node arrayType.ts
// 字面量类型
// 在 TypeScript 中，字面量不仅可以表示值，还可以表示类型，即所谓的字面量类型。
// 目前，TypeScript 支持 3 种字面量类型：字符串字面量类型、数字字面量类型、布尔字面量类型，对应的字符串字面量、数字字面量、布尔字面量分别拥有与其值一样的字面量类型

let specifiedStr: 'this is string' = 'this is string';
let string1: string = 'string text';
// specifiedStr = string1 // Error
string1 = specifiedStr

// 字符串字面量类型
let hello: 'hello' = 'hello';
// hello = 'hi'; // ts(2322) Type '"hi"' is not assignable to type '"hello"'
type Direction = 'up' | 'down';
function move(dir: Direction) {
  // ...
}
move('up'); // ok
// move('right'); // ts(2345) Argument of type '"right"' is not assignable to parameter of type 'Direction'

// 数字字面量类型及布尔字面量类型
interface Config {
  size: 'small' | 'big';
  isEnable:  true | false;
  margin: 0 | 2 | 4;
}
function fn (option: Config):void {
  console.log('Config', option)
}
fn({ size: 'small', isEnable: true, margin: 0 })

// let和const分析
let stra = 'is string'
stra = 'ss'


// console.log('literalType: ', specifiedStr)